H2 Database হল একটি শক্তিশালী, লাইটওয়েট SQL ডেটাবেজ যা ডেভেলপারদের জন্য বিভিন্ন ধরনের বাস্তব প্রয়োগে ব্যবহৃত হতে পারে। এই টিউটোরিয়ালে, আমরা একটি Spring Boot অ্যাপ্লিকেশন তৈরি করব যা H2 ডেটাবেজ ব্যবহার করবে এবং সেখানে ডেটাবেস অপারেশন যেমন CRUD (Create, Read, Update, Delete) কাজগুলো বাস্তবে দেখানো হবে।
আমরা একটি Employee Management System উদাহরণ ব্যবহার করব, যেখানে Employee তথ্য ডেটাবেজে সংরক্ষণ করা হবে।
এই উদাহরণটি Spring Boot, Spring Data JPA, এবং H2 Database ব্যবহার করে তৈরি করা হবে।
আপনি Spring Initializr ব্যবহার করে একটি Spring Boot প্রোজেক্ট তৈরি করতে পারেন। এখানে আমরা কিছু প্রাথমিক সেটআপ দেখাচ্ছি:
এটি টেমপ্লেট হিসাবে Employee Management অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে।
Spring Boot প্রোজেক্টে H2 এবং Spring Data JPA এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
pom.xml (Maven):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
build.gradle (Gradle):
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
}
application.properties
ফাইলের মাধ্যমে H2 ডেটাবেজের কনফিগারেশন করতে হবে।
# H2 Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# Enable H2 Console for accessing database through web
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
এখানে:
spring.datasource.url
: ইন-মেমরি H2 ডেটাবেজ URL।spring.h2.console.enabled
: H2 Console সক্রিয় করা হয়েছে, যাতে ডেটাবেজ ওয়েব কনসোলের মাধ্যমে অ্যাক্সেস করা যায়।ডেটাবেজের সাথে কাজ করার জন্য Employee
নামক একটি Entity তৈরি করতে হবে।
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String department;
private Double salary;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}
Spring Data JPA ব্যবহার করতে Repository Interface তৈরি করতে হবে।
import org.springframework.data.jpa.repository.JpaRepository;
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
এটি Employee
Entity এর জন্য CRUD অপারেশন সরবরাহ করবে।
Business Logic রাখার জন্য Service লেয়ার তৈরি করা হবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
// Get all employees
public List<Employee> getAllEmployees() {
return employeeRepository.findAll();
}
// Add a new employee
public Employee addEmployee(Employee employee) {
return employeeRepository.save(employee);
}
// Update an existing employee
public Employee updateEmployee(Employee employee) {
return employeeRepository.save(employee);
}
// Get employee by ID
public Optional<Employee> getEmployeeById(Long id) {
return employeeRepository.findById(id);
}
// Delete employee
public void deleteEmployee(Long id) {
employeeRepository.deleteById(id);
}
}
RESTful API এর মাধ্যমে HTTP রিকোয়েস্ট গ্রহণ এবং রেসপন্স প্রদান করার জন্য Controller তৈরি করা হবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
// Get all employees
@GetMapping
public List<Employee> getAllEmployees() {
return employeeService.getAllEmployees();
}
// Get employee by ID
@GetMapping("/{id}")
public Optional<Employee> getEmployeeById(@PathVariable Long id) {
return employeeService.getEmployeeById(id);
}
// Add new employee
@PostMapping
public Employee addEmployee(@RequestBody Employee employee) {
return employeeService.addEmployee(employee);
}
// Update employee
@PutMapping("/{id}")
public Employee updateEmployee(@PathVariable Long id, @RequestBody Employee employee) {
employee.setId(id);
return employeeService.updateEmployee(employee);
}
// Delete employee
@DeleteMapping("/{id}")
public void deleteEmployee(@PathVariable Long id) {
employeeService.deleteEmployee(id);
}
}
Spring Boot অ্যাপ্লিকেশন চালানোর পর, আপনি H2 Web Console-এ http://localhost:8080/h2-console গিয়ে আপনার ডেটাবেজ অ্যাক্সেস করতে পারবেন।
jdbc:h2:mem:testdb
sa
password
Spring Boot অ্যাপ্লিকেশন চালাতে আপনি নিম্নলিখিত কমান্ড ব্যবহার করতে পারেন:
mvn spring-boot:run
এবং ব্রাউজারে গিয়ে http://localhost:8080/employees এ GET রিকোয়েস্ট পাঠিয়ে আপনার Employee
ডেটা দেখতে পারবেন।
এই উদাহরণে আমরা Spring Boot এবং H2 Database এর ইন্টিগ্রেশন দেখিয়েছি, যেখানে আমরা একটি Employee Management System তৈরি করেছি। আমরা Employee Entity তৈরি করেছি, Spring Data JPA ব্যবহার করে Repository তৈরি করেছি এবং একটি RESTful API তৈরি করেছি যা ডেটাবেজ অপারেশনগুলো পরিচালনা করতে সক্ষম। H2 Web Console ব্যবহার করে ডেটাবেজ অ্যাক্সেস এবং ডেভেলপমেন্ট আরও সহজ করা হয়েছে।
H2 Database একটি লাইটওয়েট এবং দ্রুত SQL ডেটাবেজ সিস্টেম, যা ইন-মেমরি বা ডিস্ক-ভিত্তিক ডেটাবেজ তৈরি করার জন্য ব্যবহৃত হয়। H2 ডেটাবেজে ডেটাবেজ তৈরি এবং টেবিল ম্যানিপুলেশন করা খুবই সহজ এবং দ্রুত। এই টিউটোরিয়ালে আমরা আলোচনা করব H2 Database তৈরি, টেবিল তৈরি, এবং টেবিল ম্যানিপুলেশন করার পদ্ধতি।
H2 Database তৈরি করতে আপনাকে প্রথমে একটি ডেটাবেজ তৈরি করতে হবে। H2 ডেটাবেজটি ইন-মেমরি বা ডিস্কে তৈরি করা যেতে পারে। ডেটাবেজ তৈরি করার জন্য SQL কুয়েরি ব্যবহার করা হয়।
http://localhost:8082
).sa
CREATE DATABASE mydb;
এটি mydb
নামক একটি নতুন ডেটাবেজ তৈরি করবে।
H2 ডেটাবেজ URL-এর মাধ্যমে ডেটাবেজ তৈরি করা যায়। উদাহরণস্বরূপ, ইন-মেমরি ডেটাবেজ তৈরি করতে:
jdbc:h2:mem:testdb
এটি একটি ইন-মেমরি ডেটাবেজ তৈরি করবে যেটি শুধুমাত্র সেশন চলাকালীন থাকবে।
ডেটাবেজ বন্ধ হলে এটি স্বয়ংক্রিয়ভাবে মুছে যাবে।
ডিস্ক-ভিত্তিক ডেটাবেজ তৈরি করতে, আপনি ডেটাবেজের পাথ নির্দিষ্ট করে ডেটাবেজ URL ব্যবহার করতে পারেন:
jdbc:h2:~/mydb
এটি ডেটাবেজ ফাইলকে হোম ডিরেক্টরিতে mydb
নামে তৈরি করবে।
H2 ডেটাবেজে টেবিল তৈরি করতে CREATE TABLE SQL কমান্ড ব্যবহার করা হয়। একটি টেবিল সাধারণত কলাম এবং রো দ্বারা গঠিত, যেখানে প্রতিটি কলাম একটি নির্দিষ্ট ডেটা টাইপ ধারণ করে।
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);
এখানে:
INT
টাইপের কলাম এবং এটি PRIMARY KEY।VARCHAR(100)
টাইপের কলাম, যেখানে 100 ক্যারেক্টারের স্ট্রিং ধারণ করা যাবে।INT
টাইপের কলাম।আপনি টেবিলের জন্য ডিফল্ট মানও নির্ধারণ করতে পারেন। উদাহরণস্বরূপ:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100) DEFAULT 'Unknown',
age INT DEFAULT 0
);
এখানে:
H2 ডেটাবেজে আপনি কাস্টম ডেটা টাইপও তৈরি করতে পারেন:
CREATE TYPE phone AS VARCHAR(15);
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
phone phone
);
এখানে:
VARCHAR(15)
ব্যবহার করা হয়েছে।টেবিল তৈরি করার পর, আপনি বিভিন্ন ধরণের টেবিল ম্যানিপুলেশন করতে পারেন, যেমন ডেটা ইনসার্ট, আপডেট, ডিলিট, এবং কুয়েরি করা।
ডেটাবেজে ডেটা ইনসার্ট করতে INSERT INTO কুয়েরি ব্যবহার করা হয়:
INSERT INTO employees (id, name, age) VALUES (1, 'John Doe', 30);
এটি employees
টেবিলের মধ্যে একটি রেকর্ড ইনসার্ট করবে।
ডেটা আপডেট করতে UPDATE কুয়েরি ব্যবহার করা হয়:
UPDATE employees SET age = 31 WHERE id = 1;
এটি id = 1
রেকর্ডের age ফিল্ডটি 31 তে আপডেট করবে।
ডেটা মুছে ফেলার জন্য DELETE কুয়েরি ব্যবহার করা হয়:
DELETE FROM employees WHERE id = 1;
এটি id = 1
রেকর্ডটি মুছে ফেলবে।
ডেটাবেজ থেকে ডেটা সংগ্রহ করতে SELECT কুয়েরি ব্যবহার করা হয়:
SELECT * FROM employees;
এটি employees
টেবিল থেকে সমস্ত রেকর্ড নির্বাচন করবে।
ALTER TABLE কুয়েরি ব্যবহার করে টেবিলের স্ট্রাকচার পরিবর্তন করা যায়:
কলাম যোগ করা:
ALTER TABLE employees ADD COLUMN email VARCHAR(255);
কলাম মুছে ফেলা:
ALTER TABLE employees DROP COLUMN email;
কলামের ডেটা টাইপ পরিবর্তন:
ALTER TABLE employees ALTER COLUMN age SET DATA TYPE BIGINT;
টেবিল মুছে ফেলতে DROP TABLE কুয়েরি ব্যবহার করা হয়:
DROP TABLE employees;
এটি employees
টেবিলটি ডিলিট করে দিবে।
ডেটাবেজের পারফরম্যান্স উন্নত করার জন্য Index তৈরি করা যেতে পারে। CREATE INDEX কুয়েরি ব্যবহার করে একটি টেবিলের উপর ইনডেক্স তৈরি করা যায়:
CREATE INDEX idx_name ON employees(name);
এটি employees
টেবিলের name কলামের উপর একটি ইনডেক্স তৈরি করবে, যা ডেটা খোঁজার গতি বাড়াবে।
টেবিলের তথ্য দেখতে DESCRIBE কুয়েরি ব্যবহার করা হয়:
DESCRIBE employees;
এটি employees
টেবিলের কলাম, ডেটা টাইপ এবং অন্যান্য তথ্য প্রদর্শন করবে।
SELECT COUNT(*) FROM employees;
এটি employees
টেবিলের মোট রেকর্ড সংখ্যা দেখাবে।
H2 Database এ ডেটাবেজ তৈরি এবং টেবিল ম্যানিপুলেশন সহজ এবং সরল। আপনি CREATE TABLE, INSERT, UPDATE, DELETE, এবং SELECT কুয়েরি ব্যবহার করে ডেটা পরিচালনা করতে পারেন। এছাড়াও, আপনি ALTER TABLE, DROP TABLE এবং CREATE INDEX কুয়েরি দিয়ে টেবিলের কাঠামো পরিবর্তন বা পারফরম্যান্স অপটিমাইজ করতে পারেন। H2-এর সরলতা এবং ব্যবহারযোগ্যতা এটিকে ডেভেলপমেন্ট এবং টেস্টিংয়ের জন্য একটি আদর্শ ডেটাবেজ সমাধান করে তোলে।
JDBC (Java Database Connectivity) হল Java-তে ডেটাবেজের সাথে যোগাযোগ করার জন্য একটি API, যা ডেটাবেজ থেকে ডেটা নিয়ে আসা, ডেটা আপডেট করা, ইনসার্ট করা এবং ডিলিট করার জন্য ব্যবহৃত হয়। H2 ডেটাবেজে JDBC ব্যবহার করে আপনি সহজেই Java অ্যাপ্লিকেশন থেকে ডেটাবেজের সাথে ইন্টারঅ্যাক্ট করতে পারেন।
এই টিউটোরিয়ালে আমরা JDBC ব্যবহার করে H2 ডেটাবেজ এর বিভিন্ন কার্যকলাপ, যেমন ডেটাবেজে সংযোগ স্থাপন, কুয়েরি এক্সিকিউট করা, এবং ফলাফল পড়া দেখাব।
JDBC ব্যবহার করে H2 ডেটাবেজে সংযোগ স্থাপন করার জন্য প্রথমে আপনাকে H2 ড্রাইভার প্রয়োজন হবে। H2 ড্রাইভার সাধারণত .jar
ফাইল হিসেবে সরবরাহ করা হয়, যা আপনার প্রোজেক্টে যোগ করতে হবে।
H2 JDBC ড্রাইভার .jar
ফাইল ডাউনলোড করতে H2 Official Website থেকে ডাউনলোড করুন এবং আপনার Java প্রোজেক্টে এটিকে যোগ করুন।
এখানে একটি সাধারণ উদাহরণ দেওয়া হলো, যেখানে আমরা H2 ডেটাবেজে JDBC ব্যবহার করে সংযোগ স্থাপন করব, কুয়েরি এক্সিকিউট করব এবং ফলাফল বের করব।
import java.sql.*;
public class H2JDBCExample {
public static void main(String[] args) {
// H2 ডেটাবেজের URL, ইউজারনেম, এবং পাসওয়ার্ড
String url = "jdbc:h2:~/test"; // ~ মানে হোম ডিরেক্টরি
String user = "sa"; // ডিফল্ট ইউজারনেম
String password = ""; // ডিফল্ট পাসওয়ার্ড
try {
// ডেটাবেজে সংযোগ স্থাপন
Connection conn = DriverManager.getConnection(url, user, password);
// SQL কুয়েরি তৈরি করা
String sql = "SELECT * FROM employees"; // ধরুন employees টেবিল আছে
// কুয়েরি এক্সিকিউট করা
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
// ফলাফল প্রদর্শন করা
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
}
// সংযোগ বন্ধ করা
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
এখানে:
DriverManager.getConnection()
: এটি H2 ডেটাবেজের সাথে সংযোগ স্থাপন করার জন্য ব্যবহার করা হয়।Statement
: SQL কুয়েরি এক্সিকিউট করার জন্য ব্যবহার করা হয়।ResultSet
: SQL কুয়েরি থেকে প্রাপ্ত ডেটা ধারণ করে এবং সেই ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়।JDBC-এ SQL কুয়েরি চালাতে Statement
বা PreparedStatement
ব্যবহার করা হয়। এখানে Statement
ব্যবহার করে কুয়েরি এক্সিকিউট করা হয়েছে।
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
executeQuery()
: এটি SELECT কুয়েরির জন্য ব্যবহৃত হয়, যা ডেটা বের করে এবং ResultSet ফেরত দেয়।executeUpdate()
: এটি INSERT, UPDATE, বা DELETE কুয়েরির জন্য ব্যবহৃত হয়, যেগুলো ডেটাবেজে পরিবর্তন করে।PreparedStatement
ব্যবহারে নিরাপদ এবং কার্যকরী SQL কুয়েরি তৈরি করা যায়, যা SQL ইনজেকশন প্রতিরোধ করে।
String sql = "INSERT INTO employees (id, name, age) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
// প্যারামিটার সেট করা
pstmt.setInt(1, 1); // id = 1
pstmt.setString(2, "John Doe"); // name = "John Doe"
pstmt.setInt(3, 30); // age = 30
// কুয়েরি এক্সিকিউট করা
pstmt.executeUpdate();
setInt()
, setString()
ইত্যাদি মেথড ব্যবহার করে প্যারামিটারগুলোর মান সেট করা হয়।executeUpdate()
কুয়েরি এক্সিকিউট করে ডেটাবেজে পরিবর্তন আনে (যেমন, ইনসার্ট, আপডেট, ডিলিট)।String sql = "INSERT INTO employees (id, name, age) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 2);
pstmt.setString(2, "Jane Smith");
pstmt.setInt(3, 28);
pstmt.executeUpdate();
String sql = "UPDATE employees SET age = ? WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 29); // নতুন বয়স
pstmt.setInt(2, 2); // id = 2
pstmt.executeUpdate();
String sql = "DELETE FROM employees WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 2); // id = 2
pstmt.executeUpdate();
JDBC তে ডেটাবেজের মধ্যে ট্রানজ্যাকশন ম্যানেজমেন্ট পরিচালনা করতে commit()
এবং rollback()
ব্যবহৃত হয়।
conn.setAutoCommit(false); // অটোমেটিক কমিট বন্ধ করা
try {
// একাধিক অপারেশন
PreparedStatement pstmt1 = conn.prepareStatement("UPDATE employees SET age = ? WHERE id = ?");
pstmt1.setInt(1, 35);
pstmt1.setInt(2, 1);
pstmt1.executeUpdate();
PreparedStatement pstmt2 = conn.prepareStatement("INSERT INTO employees (id, name, age) VALUES (?, ?, ?)");
pstmt2.setInt(1, 3);
pstmt2.setString(2, "Alice Brown");
pstmt2.setInt(3, 40);
pstmt2.executeUpdate();
conn.commit(); // ট্রানজ্যাকশন কমিট করা
} catch (SQLException e) {
conn.rollback(); // সমস্যা হলে রোলব্যাক করা
}
এখানে:
setAutoCommit(false)
: ডিফল্টভাবে, JDBC ট্রানজ্যাকশনগুলো অটোমেটিক্যালি কমিট করে, কিন্তু setAutoCommit(false)
দিয়ে এটি বন্ধ করা হয় এবং ট্রানজ্যাকশন পরিচালনা করা হয়।commit()
: ট্রানজ্যাকশন কমিট করে সমস্ত পরিবর্তন ডেটাবেজে স্থায়ী করে।rollback()
: কোনো ত্রুটি হলে ট্রানজ্যাকশন রোলব্যাক করে এবং পূর্বের অবস্থা ফিরিয়ে নেয়।JDBC-এর মাধ্যমে H2 ডেটাবেজে সহজেই সংযোগ স্থাপন করা যায় এবং Java অ্যাপ্লিকেশন থেকে ডেটাবেজ অপারেশনগুলি পরিচালনা করা যায়। JDBC একটি শক্তিশালী API, যা ডেটাবেজ অ্যাক্সেস এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
Spring Boot একটি জনপ্রিয় Java ফ্রেমওয়ার্ক যা দ্রুত এবং সহজে ওয়েব অ্যাপ্লিকেশন এবং মাইক্রোসার্ভিস তৈরি করতে সহায়তা করে। H2 ডেটাবেজকে Spring Boot প্রজেক্টে ব্যবহার করা খুবই সহজ, কারণ Spring Boot অনেক বিল্ট-ইন কনফিগারেশন এবং ডিফল্ট সেটআপ সরবরাহ করে, যা আপনাকে H2 ডেটাবেজ ইন্টিগ্রেট করতে সাহায্য করে। এখানে আমরা দেখব কিভাবে একটি Spring Boot প্রজেক্টে H2 ডেটাবেজ ইন্টিগ্রেট করা যায় এবং ব্যবহার করা যায়।
প্রথমে, আপনি Spring Boot প্রজেক্ট তৈরি করুন। আপনি Spring Initializr ব্যবহার করে সহজেই একটি Spring Boot প্রজেক্ট তৈরি করতে পারেন। প্রজেক্ট তৈরি করার সময় নিচের ডিপেনডেন্সি যোগ করুন:
এর পর, "Generate" বাটনে ক্লিক করুন এবং আপনার প্রজেক্ট ডাউনলোড করুন। তারপর এটি আপনার IDE (যেমন IntelliJ IDEA বা Eclipse) এ ওপেন করুন।
application.properties
কনফিগারেশনSpring Boot প্রজেক্টে H2 ডেটাবেজ কনফিগার করার জন্য application.properties
ফাইলে কিছু কনফিগারেশন যোগ করতে হবে।
# H2 Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb # ইন-মেমরি ডেটাবেজ
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# Hibernate Configuration
spring.jpa.hibernate.ddl-auto=update # ডেটাবেজ স্কিমা আপডেট হবে
# H2 Console Configuration
spring.h2.console.enabled=true # H2 Console অ্যাক্সেস করতে পারবেন
spring.h2.console.path=/h2-console # H2 Console এর URL path
spring.datasource.url=jdbc:h2:mem:testdb
: এটি ইন-মেমরি ডেটাবেজ ব্যবহার করবে। অর্থাৎ ডেটাবেজটি শুধুমাত্র রান টাইমে থাকবে এবং প্রোগ্রাম বন্ধ হলে ডেটা মুছে যাবে।spring.h2.console.enabled=true
: এটি H2 Console সক্ষম করবে, যাতে আপনি আপনার ডেটাবেজটি একটি ওয়েব ব্রাউজারে দেখতে পারেন।spring.jpa.hibernate.ddl-auto=update
: Hibernate ব্যবহার করে ডেটাবেজ স্কিমা স্বয়ংক্রিয়ভাবে আপডেট হবে।Spring Data JPA ব্যবহার করতে হলে আপনাকে একটি Entity ক্লাস তৈরি করতে হবে, যা ডেটাবেজ টেবিলের সাথে ম্যাপ হবে।
package com.example.demo.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String department;
// Getters and Setters
public Employee() {}
public Employee(Long id, String name, String department) {
this.id = id;
this.name = name;
this.department = department;
}
// Getters and Setters
}
এটি একটি Employee টেবিলের জন্য Entity ক্লাস। এখানে @Entity
অ্যানোটেশন ব্যবহার করা হয়েছে যাতে এটি JPA Entity হিসেবে কাজ করে।
এখন আপনাকে একটি Repository তৈরি করতে হবে, যা H2 ডেটাবেজের সাথে ইন্টারঅ্যাক্ট করবে। Spring Data JPA ব্যবহার করে এটি অনেক সহজ।
package com.example.demo.repository;
import com.example.demo.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
// Custom queries can be defined here if needed
}
এটি JpaRepository এক্সটেন্ড করেছে, যার মাধ্যমে আপনি ডেটাবেজে CRUD অপারেশন করতে পারবেন।
এখন একটি Service ক্লাস তৈরি করা হবে, যা EmployeeRepository এর মাধ্যমে ডেটাবেজ অপারেশন করবে।
package com.example.demo.service;
import com.example.demo.model.Employee;
import com.example.demo.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
// Get all employees
public List<Employee> getAllEmployees() {
return employeeRepository.findAll();
}
// Save employee
public Employee saveEmployee(Employee employee) {
return employeeRepository.save(employee);
}
}
এটি একটি সিম্পল Service ক্লাস যেখানে getAllEmployees
এবং saveEmployee
মেথড রয়েছে, যা ডেটাবেজ থেকে সমস্ত কর্মচারী তথ্য নিয়ে আসে এবং নতুন কর্মচারী সংরক্ষণ করে।
এখন একটি Controller তৈরি করা হবে, যা HTTP রিকোয়েস্ট হ্যান্ডেল করবে।
package com.example.demo.controller;
import com.example.demo.model.Employee;
import com.example.demo.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/employees")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
// Get all employees
@GetMapping
public List<Employee> getAllEmployees() {
return employeeService.getAllEmployees();
}
// Add a new employee
@PostMapping
public Employee addEmployee(@RequestBody Employee employee) {
return employeeService.saveEmployee(employee);
}
}
এটি একটি REST Controller যেখানে GET
এবং POST
রিকোয়েস্ট হ্যান্ডেল করা হচ্ছে:
/api/employees
: সমস্ত কর্মচারী তথ্য নিয়ে আসে।/api/employees
: নতুন কর্মচারী ডেটাবেজে ইনসার্ট করে।আপনি Spring Boot প্রজেক্ট চালানোর পর H2 Console অ্যাক্সেস করতে পারবেন। আপনার ব্রাউজারে http://localhost:8082/h2-console URL তে যান। আপনি jdbc:h2:mem:testdb
ব্যবহার করে লগইন করতে পারবেন এবং ডেটাবেজ দেখতে পারবেন।
সবশেষে, Spring Boot অ্যাপ্লিকেশন চালাতে আপনার DemoApplication.java
ক্লাসে main
মেথড কল করুন:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
এখন Spring Boot অ্যাপ্লিকেশন রান করুন এবং আপনি H2 Database ব্যবহার করে আপনার ডেটাবেজ পরিচালনা করতে পারবেন।
এটি ছিল Spring Boot প্রজেক্টে H2 ডেটাবেজ ইন্টিগ্রেশন করার একটি সিম্পল উদাহরণ। H2 ডেটাবেজ Spring Boot এর সাথে সহজেই একীভূত হতে পারে এবং এর ব্যবহার সহজ এবং দ্রুত। আপনি ডেটাবেজ কনফিগারেশন, Entity ক্লাস, Repository, Service এবং Controller তৈরি করে Spring Boot প্রজেক্টে H2 ডেটাবেজের সাথে কাজ করতে পারেন। H2 Console আপনাকে ডেটাবেজের সমস্ত তথ্য দেখতে এবং পরিচালনা করতে সহায়তা করবে।
Stored Procedure এবং Trigger দুটি SQL-ভিত্তিক বৈশিষ্ট্য, যা ডেটাবেজে ব্যবহৃত হয় বিভিন্ন কার্যকলাপ স্বয়ংক্রিয়ভাবে সম্পাদন করতে। এগুলি ডেটাবেজের পারফরম্যান্স উন্নত করতে এবং ডেটা ইন্টিগ্রিটি এবং সিকিউরিটি বজায় রাখতে সাহায্য করে। যদিও Stored Procedure এবং Trigger একই কাজের জন্য ব্যবহৃত হতে পারে, তাদের মধ্যে কিছু পার্থক্য রয়েছে এবং আলাদা কাজ করার জন্য তাদের ব্যবহার করা হয়।
এই টিউটোরিয়ালে আমরা Stored Procedure এবং Trigger এর মধ্যে পার্থক্য, তাদের ব্যবহার এবং উদাহরণ নিয়ে আলোচনা করব।
Stored Procedure হল SQL কোডের একটি ব্লক যা ডেটাবেজে সংরক্ষিত থাকে এবং একাধিক SQL অপারেশন সম্পাদন করতে ব্যবহৃত হয়। এটি ডেটাবেজের ভেতরে একটি লজিক্যাল ইউনিট হিসেবে কাজ করে এবং যখন প্রয়োজন হয় তখন এটি কল করা হয়। Stored Procedure-এ সাধারণত একাধিক SQL স্টেটমেন্ট থাকে, যা কোনো কাজ বা লজিক সম্পাদন করে।
CREATE PROCEDURE procedure_name (param1 datatype, param2 datatype)
BEGIN
-- SQL statements
END;
CALL procedure_name(param1, param2);
ধরা যাক, আমাদের একটি users
টেবিল রয়েছে এবং আমরা একটি Stored Procedure তৈরি করতে চাই, যা users
টেবিলে একটি নতুন ইউজার যোগ করবে।
CREATE PROCEDURE AddUser (id INT, name VARCHAR, age INT)
BEGIN
INSERT INTO users (id, name, age) VALUES (?, ?, ?);
END;
এখন, এই Stored Procedure কল করতে:
CALL AddUser(1, 'Alice', 25);
এটি users
টেবিলে একটি নতুন ইউজার যোগ করবে যার id = 1
, name = 'Alice'
, এবং age = 25
।
Trigger হল একটি বিশেষ ধরনের SQL কোড যা নির্দিষ্ট ইভেন্টের পরে স্বয়ংক্রিয়ভাবে কার্যকর হয়। Trigger সাধারণত INSERT, UPDATE, অথবা DELETE অপারেশনগুলির উপর নির্ভর করে কাজ করে। যখন কোনো নির্দিষ্ট ডেটাবেজ ইভেন্ট ঘটে, তখন Trigger স্বয়ংক্রিয়ভাবে কাজ শুরু করে।
CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
-- SQL statements
END;
ধরা যাক, আমাদের users
টেবিল রয়েছে এবং আমরা এমন একটি Trigger তৈরি করতে চাই যা users
টেবিলে কোনো নতুন ইউজার ইনসার্ট হওয়ার পর একটি লগ টেবিল তৈরি করবে।
CREATE TRIGGER logNewUser
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO log (message) VALUES ('New user added: ' || NEW.name);
END;
এটি users
টেবিলে নতুন ইউজার ইনসার্ট হলে log টেবিলে একটি বার্তা যুক্ত করবে, যেখানে NEW.name
নতুন ইউজারের নাম ধারণ করবে।
বৈশিষ্ট্য | Stored Procedure | Trigger |
---|---|---|
ক্রিয়া সম্পাদন | কল করার জন্য ম্যানুয়ালি চালানো হয় | নির্দিষ্ট ইভেন্ট ঘটলে স্বয়ংক্রিয়ভাবে কার্যকর হয় |
কোড এক্সিকিউট | ডেটাবেজের সাথে যুক্ত হওয়ার পরে কল করা হয় | ডেটাবেজে ঘটিত যেকোনো পরিবর্তন বা ইভেন্ট trigger করবে |
নির্দেশনা গ্রহণ | প্যারামিটার গ্রহণ করতে পারে | প্যারামিটার গ্রহণ করতে পারে না |
ব্যবহার | একটি নির্দিষ্ট কার্যক্রম সম্পাদন করতে ব্যবহৃত হয় | ডেটাবেজে INSERT, UPDATE, DELETE অপারেশনগুলির পরে স্বয়ংক্রিয়ভাবে ব্যবহৃত হয় |
ফলাফল | রিটার্ন ভ্যালু থাকতে পারে | কোনো ফলাফল রিটার্ন করে না |
ধরা যাক, আপনি একটি sales
টেবিলের জন্য একটি Stored Procedure তৈরি করতে চান, যা নতুন বিক্রির তথ্য ইনসার্ট করবে।
CREATE PROCEDURE AddSale (sale_id INT, amount DECIMAL)
BEGIN
INSERT INTO sales (sale_id, amount) VALUES (sale_id, amount);
END;
এখন, আপনি এমন একটি Trigger তৈরি করতে চান, যা sales
টেবিলে নতুন ইনসার্ট হওয়া বিক্রির পর স্বয়ংক্রিয়ভাবে একটি লগ টেবিল তৈরি করবে।
CREATE TRIGGER logSale
AFTER INSERT ON sales
FOR EACH ROW
BEGIN
INSERT INTO sales_log (message) VALUES ('Sale added with ID: ' || NEW.sale_id);
END;
এটি sales
টেবিলে নতুন বিক্রি হওয়ার পর sales_log
টেবিলে একটি বার্তা লিখবে।
Stored Procedure এবং Trigger ডেটাবেজ অপারেশনগুলিকে আরও কার্যকরী এবং নিরাপদ করে তোলে। Stored Procedure কোড পুনঃব্যবহারযোগ্য এবং কার্যকরী হওয়ার জন্য ব্যবহৃত হয়, যেখানে Trigger স্বয়ংক্রিয়ভাবে নির্দিষ্ট ডেটাবেজ পরিবর্তন ঘটানোর পর কার্যকর হয়। এগুলির ব্যবহার ডেটাবেজের পারফরম্যান্স উন্নত করতে এবং ডেটা সুরক্ষা নিশ্চিত করতে সহায়ক।
common.read_more